package main

import "fmt"

// 值拷贝，数据类型只能传[10]类型的数组
func printArray(myArray [10]int) {
	for index, value := range myArray {
		fmt.Println("index = ", index, " value = ", value)
	}
	myArray[0] = 100 // 值传递，不会对实际入参进行修改
}

func printDynamicArray(myArray []int) {
	// _表示匿名，因为range方法返回两个参数，必须要用两个参数去接受，但此时只关注一个返回值，就可以把另一个返回值用_代替
	for _, value := range myArray {
		fmt.Println("value = ", value)
	}
	myArray[0] = 100 // 址传递，会对实际入参进行修改
}

func main() {
	// 定义一个固定长度数组，并进行默认值初始化
	var myArray [10]int
	// 定义一个固定长度数组，并进行初始化
	var myArray2 = [8]int{1, 2, 3, 4}
	// 循环
	for i := 0; i < len(myArray); i++ {
		fmt.Println(myArray[i])
	}
	for index, value := range myArray2 {
		fmt.Println("index = ", index, " value = ", value)
	}
	// 查看数组的数据类型
	fmt.Printf("myArray1 typs = %T\n", myArray)
	fmt.Printf("myArray2 typs = %T\n", myArray2)

	// 数组传参
	printArray(myArray) // 数据类型只能传[10]类型的数组
	//printArray(myArray2) // 因为[8]int与[10]int为两种类型，因此编译报错

	// 动态数组，切片 slice
	dynamicArray := []int{1, 2, 3, 4}

	fmt.Printf("dynamicArray typs = %T\n", dynamicArray)
	printDynamicArray(dynamicArray) //
	printDynamicArray(dynamicArray) // 址传递
}
